本文重点介绍 UML 活动图的概念。UML 活动图是 UML 用来对系统的动态行为进行建模的另一个常用工具。它描述了活动的顺序,并显示了从一个活动到另一个活动的控制流。UML 活动图本质上是一个流程图。

UML 活动图概述
尽管 UML 活动图和状态图都是状态机的表示,但两者之间存在本质区别:
- UML 活动图关注从一个活动到另一个活动的控制流,这是一个内部处理驱动的流;
- 而状态图则关注从一个活动到另一个活动的控制流。描述从一种状态到另一种状态的流程,主要涉及外部事件的参与。
UML活动图和流程图的区别
- 流程图侧重于处理过程的描述。它的主要控制结构是顺序、分支和循环。每个加工过程之间都有严格的顺序和时间关系。
- UML 活动图描述了对象活动的顺序关系所遵循的规则。它关注系统的行为而不是系统的过程。
- UML 活动图可以表示并发活动的情况,但流程图不能。
- UML 活动图是面向对象的,而流程图是面向过程的。
实际上,您可以使用基本的活动图来表示流程图,类似于等效图:

UML 活动图的图形表示
在 UML 中,UML 活动图表示为圆角矩形。
活动图符号总结
符号描述UML符号
Activity—— 用于表示一组动作

行动 - 要执行的任务

控制流 - 显示执行顺序

对象流—— 显示对象从一个活动(或动作)到另一个活动(或动作)的流。

初始节点—— 描绘一组动作或活动的开始

活动最终节点—— 停止活动(或动作)中的所有控制流和对象流

对象节点 - 表示连接到一组对象流的对象

决策节点—— 代表一个测试条件,以确保控制流或对象流只沿着一条路径前进

合并节点—— 将使用决策节点创建的不同决策路径重新组合在一起。

分叉节点—— 将行为拆分为一组并行或并发的活动(或动作)流

加入节点—— 将一组并行或并发的活动(或动作)流重新组合在一起。

泳道和分区—— 一种将同一参与者在活动图上执行的活动分组或将活动分组在单个线程中的方法

更多活动图示例
活动图 – 为文字处理器建模
下面的活动图示例描述了文字处理通过以下步骤创建文档的工作流程:
- 打开文字处理包。
- 创建一个文件。
- 将文件保存在其目录中的唯一名称下。
- 键入文档。
- 如果需要图形,请打开图形包,创建图形,然后将图形粘贴到文档中。
- 如果需要电子表格,请打开电子表格包,创建电子表格,然后将电子表格粘贴到文档中。
- 保存文件。
- 打印文档的硬拷贝。
- 退出文字处理包。

活动图示例 – 流程订单
给定与处理订单的工作流相关的问题描述,让我们使用活动图对描述进行可视化建模:
流程订单 – 问题描述
一旦收到订单,活动就会分成两组平行的活动。一方填写并发送订单,另一方处理账单。
在填写订单方面,交货方式是有条件地决定的。根据情况执行隔夜交割活动或定期交割活动。
最后,并行活动结合起来关闭订单。
下面的活动图示例以图形形式可视化流程。

活动图示例——学生注册
这个 UML 活动图示例描述了大学中学生注册的过程,如下所示:
- 申请人想入读大学。
- 申请人递交一份填写好的报名表副本。
- 登记员检查表格。
- 注册商确定表格已正确填写。
- 注册商通知学生参加大学概况介绍。
- 注册商帮助学生参加研讨会
- 注册商要求学生支付初始学费。

活动图——Swinlane
泳道是一种将同一参与者在活动图或活动图上执行的活动分组或将活动分组在单个线程中的方法。以下是用于对员工费用提交进行建模的 swinlane 活动图示例:

Swinlane 和非 Swinlane 活动图
下面的活动图示例描述了使用没有 swinlane 的活动图会见新客户的业务流程。

下图描述了使用带有 swinlane 的活动图会见新客户的业务流程。
